package com.sisgesbyte.web.managedBean.proyeccion;

import java.io.Serializable;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.services.proyeccion.MantProyeccionFfvvService;
import com.sisgesbyte.services.proyeccion.bean.FiltroOpcionesFFVVBean;
import com.sisgesbyte.services.proyeccion.bean.ListaProyFfvvMarcasResponse;
import com.sisgesbyte.services.proyeccion.bean.ProyeccionGeneralMarcasBean;
import com.sisgesbyte.services.ventas.MantEstructuraVentaService;
import com.sisgesbyte.services.ventas.MantenimientoFFVVService;
import com.sisgesbyte.services.ventas.MantenimientoPeriodo;
import com.sisgesbyte.services.ventas.bean.EstructuraVentaFO;
import com.sisgesbyte.services.ventas.bean.EstruturaVentaBean;
import com.sisgesbyte.services.ventas.bean.FFVVBean;
import com.sisgesbyte.services.ventas.bean.ListaEstructuraVentaResponse;
import com.sisgesbyte.services.ventas.bean.ListaFFVVJerarquiaResponse;
import com.sisgesbyte.services.ventas.bean.PeriodoBean;
import com.sisgesbyte.services.ventas.bean.PeriodoListaBean;

@ManagedBean
@ViewScoped
public class ResumenProyFfvvMarcasMBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@EJB
	private MantProyeccionFfvvService mantProyeccionFfvvService;
	@EJB
	private MantenimientoFFVVService mantenimientoFFVVService;
	@EJB
	private MantEstructuraVentaService mantEstructuraVentaService;
	@EJB
	private MantenimientoPeriodo mantenimientoPeriodo;

	private List<ProyeccionGeneralMarcasBean> listaProyeccionFfvvMarcas;
	private List<PeriodoBean> listaPeriodos;
	private List<EstruturaVentaBean> listaEstructuraVenta;
	private List<FFVVBean> listaJerarquiaFFVV;
	private int periodoDefault;
	private int idEstructuraVenta;
	private int idFfvv;
	private String totalMarcas;

	@PostConstruct
	private void init() {
		cargarPeriodos();
		mostrarPeriodoDefault();
		cargarEstructuraVenta();
	}
	
	public void inicializar(){
		totalMarcas = "";
		if(idFfvv < 1){
			System.out.println("Seleccionar FFVV ");
			return;
		}
		try{
			BigDecimal totalM =  BigDecimal.ZERO;
			FiltroOpcionesFFVVBean filtrosSQL = new FiltroOpcionesFFVVBean();
			filtrosSQL.setIdFfvv(idFfvv);
			filtrosSQL.setIdPeriodo(periodoDefault);
			
			ListaProyFfvvMarcasResponse response = mantProyeccionFfvvService.mostrarProyFfvvMarcas(ObtenerIdTransaccion(), filtrosSQL);
			if(response.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaProyeccionFfvvMarcas = response.getListaProyeccionFfvvMarcas();
				for(ProyeccionGeneralMarcasBean ls : listaProyeccionFfvvMarcas){
					totalM = totalM.add(ls.getMontoTotal());
				}
				DecimalFormatSymbols simbolo=new DecimalFormatSymbols();
			    simbolo.setDecimalSeparator('.');
			    simbolo.setGroupingSeparator(',');
			    DecimalFormat formateador = new DecimalFormat("###,###.##",simbolo);
				totalMarcas = formateador.format(totalM.setScale(3, BigDecimal.ROUND_HALF_UP));
			}else{
				this.listaProyeccionFfvvMarcas = new ArrayList<ProyeccionGeneralMarcasBean>();
			}
			
		}catch(Exception e){
			System.out.println("Error al capturar la lista resumen de marcas " + e);
			this.listaProyeccionFfvvMarcas = new ArrayList<ProyeccionGeneralMarcasBean>();
		}
	}
	
	public void cargarPeriodos() {
		try {
			PeriodoListaBean periodos = mantenimientoPeriodo.listaPeriodos(ObtenerIdTransaccion());
			this.listaPeriodos = periodos.getListaPeriodos();
		} catch (Exception e) {
			System.out.println("Error al cargar los periodos: " + e);
		}
	}
	public void mostrarPeriodoDefault() {
		for (PeriodoBean ls : getListaPeriodos()) {
			if (ls.getDefecto() != null && ls.getDefecto() == true) {
				setPeriodoDefault(ls.getId());
			}
		}
	}
	
	public void cargarEstructuraVenta(){
		try{
			EstructuraVentaFO filtroOpciones = new EstructuraVentaFO();
			filtroOpciones.setActive(true);
			filtroOpciones.setTxtBuscar(null);
			ListaEstructuraVentaResponse response = mantEstructuraVentaService.mostrarEstructuraVenta(ObtenerIdTransaccion(), filtroOpciones);
			if(response.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaEstructuraVenta = response.getListaEstructuraVenta();
			}else{
				this.listaEstructuraVenta = new ArrayList<EstruturaVentaBean>();
			}
		}catch(Exception e){
			System.out.println("Error al listar Estructura de ventas " + e);
			this.listaEstructuraVenta = new ArrayList<EstruturaVentaBean>();
		}
	}
	public void cargarFFvv(){
		
		if(idEstructuraVenta < 1){
			System.out.println("Debe seleccionar la estructura de venta ");
			return;
		}
		try{
			FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
			List<Object> valores = new ArrayList<>();
			List<FiltrosBean> filtro = new ArrayList<FiltrosBean>();
				FiltrosBean filtroFfvv = new FiltrosBean();
				List<String> campoFfvv = new ArrayList<String>();
				campoFfvv.add("ee.estructura_venta_id");
				campoFfvv.add("ee.active");
				filtroFfvv.setCampos(campoFfvv);
				filtroFfvv.setOperador("=");
				filtro.add(filtroFfvv);
				valores.add(idEstructuraVenta);
				valores.add(true);

			filtroSQL.setListaFiltros(filtro);
			filtroSQL.setListaValores(valores);
			ListaFFVVJerarquiaResponse response = mantenimientoFFVVService.listaFFVV(ObtenerIdTransaccion(), filtroSQL);
			if(response.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaJerarquiaFFVV = response.getListaJerarquiaFFVV();
			}else{
				this.listaJerarquiaFFVV = new ArrayList<FFVVBean>();
			}
		}catch(Exception e){
			System.out.println("Error al cargar la lista de FFVV " + e);
			this.listaJerarquiaFFVV = new ArrayList<FFVVBean>();
		}
	}
	public String ObtenerIdTransaccion() {
		FacesContext fCtx = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
		String sessionId = session.getId().replace(".undefined", "");
		return sessionId;
	}
	public List<ProyeccionGeneralMarcasBean> getListaProyeccionFfvvMarcas() {
		return listaProyeccionFfvvMarcas;
	}

	public void setListaProyeccionFfvvMarcas(
			List<ProyeccionGeneralMarcasBean> listaProyeccionFfvvMarcas) {
		this.listaProyeccionFfvvMarcas = listaProyeccionFfvvMarcas;
	}

	public List<PeriodoBean> getListaPeriodos() {
		return listaPeriodos;
	}

	public void setListaPeriodos(List<PeriodoBean> listaPeriodos) {
		this.listaPeriodos = listaPeriodos;
	}

	public List<EstruturaVentaBean> getListaEstructuraVenta() {
		return listaEstructuraVenta;
	}

	public void setListaEstructuraVenta(
			List<EstruturaVentaBean> listaEstructuraVenta) {
		this.listaEstructuraVenta = listaEstructuraVenta;
	}

	public List<FFVVBean> getListaJerarquiaFFVV() {
		return listaJerarquiaFFVV;
	}

	public void setListaJerarquiaFFVV(List<FFVVBean> listaJerarquiaFFVV) {
		this.listaJerarquiaFFVV = listaJerarquiaFFVV;
	}

	public int getPeriodoDefault() {
		return periodoDefault;
	}

	public void setPeriodoDefault(int periodoDefault) {
		this.periodoDefault = periodoDefault;
	}

	public int getIdEstructuraVenta() {
		return idEstructuraVenta;
	}

	public void setIdEstructuraVenta(int idEstructuraVenta) {
		this.idEstructuraVenta = idEstructuraVenta;
	}

	public int getIdFfvv() {
		return idFfvv;
	}

	public void setIdFfvv(int idFfvv) {
		this.idFfvv = idFfvv;
	}

	public String getTotalMarcas() {
		return totalMarcas;
	}

	public void setTotalMarcas(String totalMarcas) {
		this.totalMarcas = totalMarcas;
	}

}
